磁盘冗余阵列RAID与磁盘逻辑卷LVM
==========================================

RAID：磁盘冗余阵列
-------------------------------------------------------------------------------
RAID实现的方式：
        外接式磁盘阵列：通过扩展卡提供适配能力
        内接式RAID：主板集成RAID控制器
        Software RAID
RAID级别：组成RAID阵列的不同方式
        <img src="./img/1.png" alt="">
-------------------------------------------------------------------------------
Centos 6上RAID10实现：

 -------------------------------------------------------------------------------
mdadm：模式化工具
OPTIONS：
                支持的RAID级别：LINEAR,RAID0，RAID1，RAID4，RAID5，RAID6,RAID10;
                模式：
                    创建：-C
                            -n #：使用n个块设备创建RAID
                            -l #：指明要创建的RAID级别
                            -a （yes|no）：自动创建目标RAID设备的设备文件
                            -c CHUNK_SIZE：指定块大小
                            -x #：指明空闲盘的个数。
                                ~]# mdadm -C /dev/md0 -a yes -n 3 -x 1 -l 5 /dev/sda[7,8,9,10]
                                ~]# cat /proc/adstat
                                ~]# mke2fs -t ext4 /dev/md0
                                ~]# mount /dev/md0 /mydata
                                ~]# df -lh
                                ~]# blkid /dev/md0  （查看uuid，开机启动绑定uuid）
                                ~]# adadm -D /dev/md0
                                ~]# mdadm /dev/md0 -f /dev/sda7 （标记为损坏盘）
                                ~]# cat /proc/mdstat
                                ~]# watch -n1 "cat /proc/mdstat"
                                ~]# mdmdm -D /dev/md0
                                ~]# mdadm /dev/md0 -f /dev/sda8
                                ~]# mdadm /dev/md0 -r /dev/sda7
                                ~]# mdadm /dev/md0 -a /dev/sda7
                    装配：-A
                    监控：-F
                    显示详细信息：-D 
                    管理：
                        -f：标记为损坏
                        -r：移除磁盘
                        -a：添加磁盘
                 查看状态：
                    cat /proc/mdstat
                watch 命令：
                    -n #：刷新间隔。
                    watch -n# 'COMAND'
                停止设备：
                    mdadm -S /dev/md#

                raiddevice：/dev/md#
                component -devices：任意块设备
           md：multi devices。组合内核中的md

-------------------------------------------------------------------------------



LVM：磁盘逻辑卷：将一个或多个底层块设备组织成一个逻辑设备的模块
物理卷（physical volume）：物理卷就是指硬盘分区或从逻辑上与磁盘分区具有同样功能的设备(如RAID)，是LVM的基本存储逻辑块，但和基本的物理存储介质（如分区、磁盘等）比较，却包含有与LVM相关的管理参数。

卷组（Volume Group）：LVM卷组类似于非LVM系统中的物理硬盘，其由物理卷组成。可以在卷组上创建一个或多个“LVM分区”（逻辑卷），LVM卷组由一个或多个物理卷组成。

逻辑卷（logical volume）：LVM的逻辑卷类似于非LVM系统中的硬盘分区，在逻辑卷之上可以建立文件系统(比如/home或者/usr等)。

PE（physical extent）：每一个物理卷被划分为称为PE(Physical Extents)的基本单元，具有唯一编号的PE是可以被LVM寻址的最小单元。PE的大小是可配置的，默认为4MB。

LE（logical extent）：逻辑卷也被划分为被称为LE(Logical Extents) 的可被寻址的基本单位。在同一个卷组中，LE的大小和PE是相同的，并且一一对应。
-------------------------------------------------------------------------------
物理卷管理：PV
    扫描：pvscan（pvs）
    建立：pvcreate
            ~]# pvcreate 设备名    
    显示：pvdisplay
    删除：pvremove
卷组管理：VG
    扫描：vgscan（vgs）
    建立：vgcreate
            ~]# vgcreate  卷组名  物理卷名1 物理卷名2
    显示：vgdisplay
    增加：vgextend    
    减少：vgreduce
    删除：vgremove
    vgchange -s
逻辑卷管理：LV
    扫描：lvscan（lvs）
    建立：lvcreate
            ~]# lvcreate   -L  大小  -n  逻辑卷名  卷组名
    显示：lvdisplay
    增加：lvextend
            ~]# lvextend  -L  +大小  /dev/卷组名/逻辑卷名 
    减少：lvreduce
    改变容量：lvresize
    删除：lvremove
-------------------------------------------------------------------------------
推荐博客：
    https://linux.cn/article-3218-1.html
    http://www.cnblogs.com/net2012/p/3365904.html
    http://www.cnblogs.com/gaojun/archive/2012/08/22/2650229.html
    http://www.cnblogs.com/mchina/p/linux-centos-logical-volume-manager-lvm.html
    http://www.cnblogs.com/shawnloong/p/3722469.html
    http://blog.csdn.net/ustc_dylan/article/details/7878284
示例：
一.创建LINUX LVM
    1：添加硬盘，并分区，指定类型为 8e 。（8e是指定的lvm类型）
        ~]# fdisk /dev/sdb
           Device Boot      Start         End      Blocks   Id  System
        /dev/sdb1            2048     2099199     1048576   8e  Linux LVM
        /dev/sdb2         2099200     4196351     1048576   8e  Linux LVM
        /dev/sdb3         4196352     6293503     1048576   8e  Linux LVM
        /dev/sdb4         6293504    20971519     7339008    5  Extended
        /dev/sdb5         6295552     8392703     1048576   8e  Linux LVM
        /dev/sdb6         8394752    20971519     6288384   8e  Linux LVM

    2、创建PV
        ~]# pvcreate /dev/sdb5
                Physical volume "/dev/sdb5" successfully created
        ~]# pvcreate /dev/sdb6
                Physical volume "/dev/sdb6" successfully created
        ~]# pvs
                PV         VG     Fmt  Attr PSize   PFree 
                /dev/sda2  centos lvm2 a--  119.51g 64.00m
                /dev/sdb5         lvm2 ---    1.00g  1.00g
                /dev/sdb6         lvm2 ---    6.00g  6.00g

    3，创建VGS
        ~]# vgcreate onlinevg /dev/sdb{5,6}
            Volume group "onlinevg" successfully created
        ~]# vgs
              VG       #PV #LV #SN Attr   VSize   VFree 
              centos     1   3   0 wz--n- 119.51g 64.00m
              onlinevg   2   0   0 wz--n-   6.99g  6.99g

    4、创建LV
        ~]# lvcreate -L 2G -n mylv onlinevg
            Logical volume "mylv" created.
        ~]# lvs
              LV   VG       Attr       LSize  Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
              home centos   -wi-ao---- 67.45g                                                    
              root centos   -wi-ao---- 50.00g                                                    
              swap centos   -wi-ao----  2.00g                                                    
              mylv onlinevg -wi-a-----  2.00g 

        逻辑卷的设备文件：/dev/VG_NAME/LV_NAME
        ~]# ls -l /dev/onlinevg/mylv
                lrwxrwxrwx. 1 root root 7 Apr  3 20:59 /dev/onlinevg/mylv -> ../dm-3

    5、格式化LV
        ~]# mke2fs -t ext4 /dev/onlinevg/mylv

    6、挂载分区
        ~]# mount /dev/onlinevg/mylv /mnt/
        ~]# df -h
                Filesystem                 Size  Used Avail Use% Mounted on
                /dev/mapper/centos-root     50G   14G   37G  27% /
                devtmpfs                   892M     0  892M   0% /dev
                tmpfs                      914M   92K  914M   1% /dev/shm
                tmpfs                      914M   17M  897M   2% /run
                tmpfs                      914M     0  914M   0% /sys/fs/cgroup
                /dev/mapper/centos-home     68G   72M   68G   1% /home
                /dev/sda1                  497M  197M  301M  40% /boot
                /dev/sr0                   7.1G  7.1G     0 100% /run/media/mdx/CentOS 7 x86_64
                /dev/mapper/onlinevg-mylv  2.0G  6.0M  1.8G   1% /mnt

二、扩展VG
    1、首先在创建一个PV
        ~]# pvcreate /dev/sdb3
            Physical volume "/dev/sdb3" successfully created

    2、通过vgcreatend命令扩展VG
        ~]# vgextend onlinevg /dev/sdb3
            Volume group "onlinevg" successfully extended
        ~]# vgs
            VG       #PV #LV #SN Attr   VSize   VFree 
            centos     1   3   0 wz--n- 119.51g 64.00m
            onlinevg   3   1   0 wz--n-   7.99g  5.99g

三、缩减VG
    1、利用pvmove将/dev/sdb5中的数据移到物理卷上

    pvmove /dev/sdb5
/dev/sdb5:Mover:100.0%

使用Vim编辑器，打开/etc/fstab，在最后一行添加如图中所示，其中/dev/VolGroup00/lvData指定需要挂载的分区LV，/root/test指定要挂载的目录（挂载点），ext3分区文件系统格式，其它使用默认即可
npm 和 Bundler
-------------------------------------------------------------------------------
LVM快照：
        冷备份：卸载掉文件系统，不能读不能写
        温备份：不卸载文件系统，能读取文件系统内容但是不能写
        热备份：不卸载文件系统，既能读取文件系统内容又能写入

      注意：
      1），快照其实也是一个逻辑卷  
      2），快照只能对逻辑卷LVM进行备份，并且只能对同一个卷组的逻辑卷进行备

        快照卷核心技术
写时复制（copy-on-write，COW）
 
      写时复制快照在快照时间点之后，没有物理数据复制发生，仅仅复制了原始数据物理位置的元数据。因此，快照创建非常快，可以瞬间完成。然后，快照副本跟踪原始卷的数据变化（即原始卷写操作），一旦原始卷数据块发生写操作，则先将原始卷数据块读出并写入快照卷，然后用新数据块覆盖原始卷。这样我们访问快照卷上的数据仍旧是写操作前的，可以保证我们备份数据的一致性。
-------------------------------------------------------------------------------






[root@mdx ~]# mke2fs -t ext4 /dev/onlinevg/mylv
mke2fs 1.42.9 (28-Dec-2013)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
131072 inodes, 524288 blocks
26214 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=536870912
16 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks: 
    32768, 98304, 163840, 229376, 294912

Allocating group tables: done                            
Writing inode tables: done                            
Creating journal (16384 blocks): done
Writing superblocks and filesystem accounting information: done 















硬盘分区有三种，主磁盘分区、扩展磁盘分区、逻辑分区。
一个硬盘主分区至少有1个，最多4个，扩展分区可以没有，最多1个。且主分区+扩展分区总共不能超过4个。逻辑分区可以有若干个。
在windows下激活的主分区是硬盘的启动分区，他是独立的，也是硬盘的第一个分区，正常分的话就是C区。在linux下主分区和逻辑分区都可以用来放系统，引导os开机，grub会兼容windows系统开机启动。分出主分区后，其余的部分可以分成扩展分区，一般是剩下的部分全部分成扩展分区，也可以不全分，那剩的部分就浪费了。
但扩展分区是不能直接用的，他是以逻辑分区的方式来使用的，所以说扩展分区可分成若干逻辑分区。他们的关系是包含的关系，所有的逻辑分区都是扩展分区的一部分。在linux中第一块硬盘分区为hda分区(或者是sda分区)，主分区编号为hda1-4，逻辑分区从5开始。
硬盘的容量=主分区的容量+扩展分区的容量 扩展分区的容量=各个逻辑分区的容量之和